#ifndef __CTYPES_H__
#define __CTYPES_H__

#ifdef __COMPILE_WIN32__

    #ifdef POWERLIBRARYENGINE_EXPORTS
        #define POWERLIBRARYENGINE_API __declspec(dllexport)
    #else
        #define POWERLIBRARYENGINE_API __declspec(dllimport)
    #endif

#endif

#ifdef __COMPILE_LINUX__

    #ifdef POWERLIBRARYENGINE_EXPORTS
        #define POWERLIBRARYENGINE_API __attribute__ ((visibility("default")))
    #else
        #define POWERLIBRARYENGINE_API
    #endif

#endif

//#define HIGH_PRECCISSION_POSSITIONS

#include <string>
#include <vector>
#include <list>
#include <map>
#include "MemManager.h"

typedef unsigned int				u32;
typedef int							s32;
typedef unsigned short				u16;
typedef short						s16;
typedef char						s8;
typedef unsigned char				u8;
typedef float						f32;
typedef double						f64;
#ifdef HIGH_PRECCISSION_POSSITIONS
typedef f64							vPos;
#else
typedef f32							vPos;
#endif

typedef std::string				stringc;
typedef std::wstring            stringw;

#define LEN_VEC					3
#define NUM_COL_COMPONETS		4
#define X_						0
#define Y_						1
#define Z_						2
#define R_						0
#define G_						1
#define B_						2
#define A_						3

#define FREE(point)				if (point)	{	free(point);point=NULL;		}
#define DEALLOCATE(point)		if (point)	{	delete point;point=NULL;		}
#define DEALLOCATEARRAY(point)	if (point)	{	delete[] point;point=NULL;	}
#define ABS(f)					((f<0)?f*-1:f)

#define PI			(vPos)3.14159265359
#define DEGTORAD	(vPos)(PI / 180.0)
#define RADTODEG	(vPos)(180.0 / PI)

#include "vector2d.h"
#include "vector3d.h"
#include "quad2d.h"
#include "quad3d.h"
#include "IListContainer.h"
#include "IVectorContainer.h"

#endif
